/**
 *给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符，并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。
 *
 * 在执行上述操作后，返回包含相同字母的最长子字符串的长度。
 * https://leetcode.cn/problems/longest-repeating-character-replacement/description/
 *
 */
class MinOperations {
    public int minOperations(int[] nums, int x) {
        int sum = 0;
        for(int num : nums) {
            sum += num;
        }
        if(sum < x) {
            return -1;
        }
        int ret = Integer.MAX_VALUE;
        int lsum = 0;
        int rsum = sum;
        int len = nums.length;
        int right = 0;
        int left = -1;
        for(left = -1;left < len;left++) {
            if(left!=-1) {
                lsum += nums[left];
            }
            while(right < len && lsum + rsum > x) {
                rsum -= nums[right];
                right++;
            }
            if(lsum + rsum == x) {
                ret = Math.min(ret,left+1+(len - right));
            }
        }
        return ret == Integer.MAX_VALUE ? -1 : ret;
    }
}